<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>tab显项卡显示的基类开发</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      body {
        display: flex;
        justify-content: center;
        align-items: center;
        width: 100vw;
        height: 100vh;
      }
      main {
        width: 400px;
        flex-direction: column;
        position: relative;
        margin-right: 20px;
      }
      main nav {
        display: flex;
        height: 50px;
        align-items: center;
      }
      main nav a {
        background: #95a5a6;
        margin-right: px;
        padding: 10px 20px;
        border: solid 1px #333;
        color: #fff;
        text-decoration: none;
      }
      main nav a:first-of-type {
        background: #e67e22;
      }
      section {
        height: 200px;
        width: 100%;
        background: #f1c40f;
        position: absolute;
        font-size: 5em;
        /* display: none; */
      }
      /* .hd-tab section:first-of-type {
        display: block;
      } */
      section:nth-child(even) {
        background: #27ae60;
      }
    </style>
  </head>
  <body>
    <main class="tab1">
      <nav>
        <a href="javascript:;">后盾人</a>
        <a href="javascript:;">hdcms</a>
      </nav>
      <section>1</section>
      <section>2</section>
    </main>
    <main class="tab2">
      <nav>
        <a href="javascript:;">后盾人</a>
        <a href="javascript:;">hdcms</a>
      </nav>
      <section>1</section>
      <section>2</section>
    </main>
  </body>
  <script>
    //继承工厂
    function extend(sub, sup) {
      sub.prototype = Object.create(sup.prototype);
      sub.prototype.constructor = sub;
    }
    //动作类
    function Animation() {}
    //隐藏所有元素
    Animation.prototype.hide = function() {
      this.style.display = "none";
    };
    //显示所有元素
    Animation.prototype.show = function() {
      this.style.display = "block";
    };
    //改变元素集合背景
    Animation.prototype.background = function(color) {
      this.style.backgroundColor = color;
    };
    extend(Tab, Animation);
    //选项卡类
    function Tab(el) {
      this.tab = document.querySelector(el);
      this.links = this.tab.querySelectorAll("a");
      this.sections = this.tab.querySelectorAll("section");
    }

    Tab.prototype.run = function() {
      this.bindEvent();
      this.reset();
      this.action(0);
    };
    //绑定事件
    Tab.prototype.bindEvent = function() {
      this.links.forEach((el, i) => {
        el.addEventListener("click", () => {
          this.reset();
          this.action(i);
        });
      });
    };
    //点击后触发动作
    Tab.prototype.action = function(i) {
      this.background.call(this.links[i], "#e67e22");
      this.show.call(this.sections[i]);
    };
    //重置link与section
    Tab.prototype.reset = function() {
      this.links.forEach((el, i) => {
        this.background.call(this.links[i], "#95a5a6");
        this.hide.call(this.sections[i]);
      });
    };
    new Tab(".tab1").run();
    new Tab(".tab2").run();
  </script>
</html>
